#include<iostream>
#include<string.h>
using namespace std;
class String
{
private:
    char* str;
public:
    String(const char* str)
    {
        this->str=new char[strlen(str)+1];
        strcpy(this->str,str);
    }
    String(void)
    {

    }
    String(String& that)
    {
        this->str=new char[strlen(that.str)+1];
        strcpy(this->str,that.str);
    }
    String& operator = (String& that)
    {
        //释放就内存
        delete[] this->str;
        //申请新内存
        this->str =new char[strlen(that.str)+1];
        //拷贝内容
        strcpy(this->str,that.str);
      
    }
    ~String()
    {
        delete[] str;

    }
    //输出字符串
    char* puts()
    {
        return str;
    }
    void show()
    {
        cout<<str<<endl;
    }
    //在字符串末尾添加字符串
    void append(const char* str1);
    //在字符串末尾添加n个字符
    bool append(const char* str1,const int n);
    //为字符串赋新值
    void assign(const char* str1);
    //按位置查找字符
    char at(int n);
    //和别的字符串比较
    int compare(const char* str);
    //将自己拷贝给别的函数
    void copy(char* str);
    //判断是否为空
    bool empty(void);
};
//判断是否为空
bool String::empty(void)
{
    if(NULL==str)
    {
        return true;

    }
    else
    {
        return false;
    }
    
}
 //将自己拷贝给别的函数
void String::copy(char* str)
{
    strcpy(str,this->str);
    
}
//和别的字符串比较
int String::compare(const char* str)
{
    return strcmp(this->str,str);
}
char String::at(int n)
{
    cout<<*(str+n)<<endl;
    return *(str+n);
}
 void String::assign(const char* str1)
 {
     delete[] str;
     str = new char[strlen(str1)+1];
     strcpy(str,str1);
 }
void String::append(const char* str1)
{
    char* temp_str=new char[strlen(str)+1];
        strcpy(temp_str,str);
        delete[] str;
        str=new char[strlen(temp_str)+strlen(str1)+1];
        strcpy(str,temp_str);
        strcat(str,str1);
        delete[] temp_str;  
}
bool String::append(const char*str1,const int n)
{
    if(n<=strlen(str1))
    {
        char* temp_str=new char[strlen(str)+1];
        strcpy(temp_str,str);
        delete[] str;
        str=new char[strlen(temp_str)+n+1];
        strcpy(str,temp_str);
        strncat(str,str1,n);
        delete[] temp_str;
        return true;
    }
    else
    {
        return false;
    }
    
}
int main()
{
    String str("何江");
    str.show();
    String str2=str;
    str2.show();
    String str3("真帅");
    str2.append(str3.puts());
    str2.show();
    str.assign(str2.puts());
    str.show();
  
}